package logic

import (
	"fmt"
	"gopkg.in/mgo.v2/bson"
	"svvenus/conf"
	"svvenus/vgame/model"
	"svvenus/vpub/db/dbm"
	"svvenus/zlog"
	"svvenus/znet/zpb"
)

// Equip
// @Description: 装备
type Equip struct {
	model.EquipDoc
	IsNew    bool `bson:"-"` //是否新的
	NeedSave bool `bson:"-"` //是否需要存档
}

// NewEquip
// @Description: 创建装备 根据配置ID
// @param cfgId
// @return *Equip
func NewEquip(cfg conf.ConfigEquip) *Equip {
	equip := &Equip{}
	equip.Id = bson.NewObjectId()
	equip.CfgId = cfg.Id
	equip.Level = cfg.InitLevel
	equip.Star = cfg.InitStar
	return equip
}

// Save
// @Description: 存档
// @receiver equip
// @param db
func (equip *Equip) Save(db *dbm.MgoSession) {
	if !(equip.IsNew || equip.NeedSave) {
		return
	}
	err := db.Save(&equip.EquipDoc, equip.IsNew)
	if err != nil {
		zlog.Error(err)
	} else {
		equip.IsNew = false
		equip.NeedSave = false
	}
}

// Load
// @Description: 读档
// @receiver equip
// @param db
// @return bool
func (equip *Equip) Load(db *dbm.MgoSession) bool {
	err := db.GetId(&equip.EquipDoc)
	if err != nil {
		zlog.Error(fmt.Sprintf("装备读档失败 pid=%s id=%s", equip.Pid, equip.IdString()), err)
		return false
	}
	return true
}
func (equip *Equip) EquipInfo() *zpb.EquipInfo {
	info := &zpb.EquipInfo{}
	info.Id = equip.IdString()
	info.CfgId = int32(equip.CfgId)
	info.Level = int32(equip.Level)
	info.Star = int32(equip.Star)
	return info
}
